/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modules.estoque.bo;

import java.util.Date;
import java.util.List;
import modules.estoque.models.dao.CargoDAO;
import modules.estoque.models.dao.EstoqueDAO;
import modules.estoque.models.dto.Cargo;
import modules.estoque.models.dto.Entrada;
import modules.estoque.models.dto.Produto;
import modules.estoque.models.dto.Saida;
import modules.estoque.models.dto.custom.VwAgrupamentoProdutoPreco;
import modules.estoque.util.BoxPanel;
import modules.estoque.util.Funcoes;
import modules.estoque.validation.Validation;
import org.hibernate.exception.ConstraintViolationException;

/**
 *
 * @author Clezio
 */
public class GerenciadorBO {
    public boolean registrarEntrada(Entrada entrada){
        try{
            Validation.getInstance().valid(entrada);
            if(Validation.getInstance().hasErrors()){
                BoxPanel.showMessageError(Funcoes.getListErros(Validation.getInstance().getErros()));
                return false;
            }else{
                new EstoqueDAO().registrarEntrada(entrada);
            }
            return true;
        }catch(ConstraintViolationException e){
            BoxPanel.showMessageDialog(null,"Não foi possível registrar Entrada. Por favor, tente novamente.");
            Funcoes.registrarLogErro(e);
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível registrar Entrada. Por favor, tente novamente.");
            Funcoes.registrarLogErro(e);
        }
        return false;
    }
    
    public boolean registrarSaida(Saida saida){
        try{
            Validation.getInstance().valid(saida);
            if(Validation.getInstance().hasErrors()){
                BoxPanel.showMessageError(Funcoes.getListErros(Validation.getInstance().getErros()));
                return false;
            }else{
                new EstoqueDAO().registrarSaida(saida);
            }
            return true;
        }catch(ConstraintViolationException e){
            BoxPanel.showMessageDialog(null,"Não foi possível registrar Saída. Por favor, tente novamente.");
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível registrar Saída. Por favor, tente novamente.");
            Funcoes.registrarLogErro(e);
        }
        return false;
    }

    public List<Entrada> listarEntradasByData(Date date) {
        try{
            return new EstoqueDAO().listarEntradasByData(date);
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível listar Entrada.");
            Funcoes.registrarLogErro(e);
        }
        return null;
    }
    
    public List<Saida> listarSaidasByData(Date date) {
        try{
            return new EstoqueDAO().listarSaidasByData(date);
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível listar Saída.");
            Funcoes.registrarLogErro(e);
        }
        return null;
    }

    public Entrada obterEntradaById(Integer id) {
        try{
            return new EstoqueDAO().obterEntradaById(id);
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Registro não encontrado");
            Funcoes.registrarLogErro(e);
        }
        return null;
    }
    
    public Saida obterSaidaById(Integer id) {
        try{
            return new EstoqueDAO().obterSaidaById(id);
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Registro não encontrado");
            Funcoes.registrarLogErro(e);
        }
        return null;
    }

    public boolean estornarEntrada(Entrada entrada) {
        try{
            return new EstoqueDAO().estornarEntrada(entrada);
        }catch(ConstraintViolationException e){
            BoxPanel.showMessageDialog(null,"Não foi possível estornar Entrada. Por favor, tente novamente.");
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível estornar Entrada. Por favor, tente novamente.");
            Funcoes.registrarLogErro(e);
        }
        return false;
    }
    
    public boolean estornarSaida(Saida saida) {
        try{
            return new EstoqueDAO().estornarSaida(saida);
        }catch(ConstraintViolationException e){
            BoxPanel.showMessageDialog(null,"Não foi possível estornar Entrada. Por favor, tente novamente.");
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível estornar Entrada. Por favor, tente novamente.");
            Funcoes.registrarLogErro(e);
        }
        return false;
    }
    
    public List<Entrada> listarEntradasByProduto(Produto produto) {
        try{
            return new EstoqueDAO().listarEntradasByProduto(produto);
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível listar registros.");
            Funcoes.registrarLogErro(e);
        }
        return null;
    }
    
    public List<VwAgrupamentoProdutoPreco> listarEntradasAgrupadaByProdutoPreco(Produto produto) {
        try{
            return new EstoqueDAO().listarEntradasAgrupadaByProdutoPreco(produto);
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível listar registros.");
            Funcoes.registrarLogErro(e);
        }
        return null;
    }
}
